<?php

namespace App\Traits;

trait EnumExtend {
    // 以array返回枚举的key
    public static function keys(): array
    {
        return array_map(function ($item) {
            return $item->name;
        }, self::cases());
    }

    // 以['key' => 'value', ...]形式返回枚举内容，可供select组件选择使用
    public static function keyValues(): array
    {
        $result = [];
        foreach (self::cases() as $item) {
            $result[$item->name] = $item->value;
        }
        return $result;
    }

    // 判断持久层返回的是否相同
    public function equal(string $value): bool
    {
        return self::tryFrom($value) === $this;
    }
    // 判断string key是否包含在枚举里面
    public static function include(string $value): bool
    {
        return in_array($value, self::keys());
    }
    // 判读多个string key是否全部包含在枚举里面
    public static function includeAll(array $names): bool
    {
        $keys = self::keys();
        foreach ($names as $name) {
            if (!in_array($name, $keys)) {
                return false;
            }
        }
        return true;
    }
}